#include <iostream>
using namespace std;

struct TreeNode {
  int val;
  TreeNode *left;
  TreeNode *right;
  TreeNode() : val(0), left(nullptr), right(nullptr) {}
  TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  TreeNode(int x, TreeNode *left, TreeNode *right)
      : val(x), left(left), right(right) {}
};

class Solution {
public:
  TreeNode *mergeTrees(TreeNode *root1, TreeNode *root2) {
    int v1, v2;
    if (root1 == nullptr && root2 == nullptr)
      return nullptr;

    int v1 = root1 ? root1->val : 0;
    int v2 = root2 ? root2->val : 0;
    if (root1)
      root1->val += root2->val;
    else
      root1 = new TreeNode(v1 + v2);
    root1->left = mergeTrees(root1->left, root2->left);
    root1->right = mergeTrees(root1->right, root2 ? root2->right : nullptr);
    return root1;
  }
};
int main() { return 0; }